bd1dc9cd5dcf71459f9ce1d093e68c664899a47c,htroot/Threaddump_p.java,Threaddump_p,respond,#httpRequestHeader#serverObjects#serverSwitch#,54

Before Change


    	sb = (plasmaSwitchboard) env;
    	final StringBuffer buffer = new StringBuffer(1000);
    	
    	if (post != null && post.containsKey("createThreaddump")) {
    	    final boolean plain = post.get("plain", "false").equals("true");
    	    final int sleep = post.getInt("sleep", 0); // a sleep before creation of a thread dump can be used for profiling
    	    if (sleep > 0) try {Thread.sleep(sleep);} catch (final InterruptedException e) {}
    	    prop.put("dump", "1");
        	// Thread dump
        	final Map<Thread,StackTraceElement[]> stackTraces = Thread.getAllStackTraces();
        	final Date dt = new Date();
        	final String versionstring = yacyVersion.combined2prettyVersion(sb.getConfig("version","0.1"));
        	
        	bufferappend(buffer, plain, "************* Start Thread Dump " + dt + " *******************");
        	bufferappend(buffer, plain, "");
        	bufferappend(buffer, plain, "YaCy Version: " + versionstring);
        	bufferappend(buffer, plain, "Total Memory = " + (Runtime.getRuntime().totalMemory()));
        	bufferappend(buffer, plain, "Used  Memory = " + (Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory()));
        	bufferappend(buffer, plain, "Free  Memory = " + (Runtime.getRuntime().freeMemory()));
        	bufferappend(buffer, plain, "");
        	bufferappend(buffer, plain, "");
            
        	appendStackTraces(sb.getRootPath(), buffer, stackTraces, plain, Thread.State.BLOCKED);
        	appendStackTraces(sb.getRootPath(), buffer, stackTraces, plain, Thread.State.RUNNABLE);
        	appendStackTraces(sb.getRootPath(), buffer, stackTraces, plain, Thread.State.TIMED_WAITING);
        	appendStackTraces(sb.getRootPath(), buffer, stackTraces, plain, Thread.State.WAITING);
        	appendStackTraces(sb.getRootPath(), buffer, stackTraces, plain, Thread.State.NEW);
        	appendStackTraces(sb.getRootPath(), buffer, stackTraces, plain, Thread.State.TERMINATED);
            
        	bufferappend(buffer, plain, "************* End Thread Dump " + dt + " *******************");
        

After Change


    	bufferappend(buffer, plain, "");
    	bufferappend(buffer, plain, "");
    	
        if (post != null && post.containsKey("multipleThreaddump")) {
            final ArrayList<Map<Thread,StackTraceElement[]>> traces = new ArrayList<Map<Thread,StackTraceElement[]>>();
            for (int i = 0; i < 100; i++) {
                traces.add(Thread.getAllStackTraces());
            }
            appendStackTraceStats(sb.getRootPath(), buffer, traces, plain, Thread.State.BLOCKED);
            appendStackTraceStats(sb.getRootPath(), buffer, traces, plain, Thread.State.RUNNABLE);
            appendStackTraceStats(sb.getRootPath(), buffer, traces, plain, Thread.State.TIMED_WAITING);
            appendStackTraceStats(sb.getRootPath(), buffer, traces, plain, Thread.State.WAITING);
            appendStackTraceStats(sb.getRootPath(), buffer, traces, plain, Thread.State.NEW);
            appendStackTraceStats(sb.getRootPath(), buffer, traces, plain, Thread.State.TERMINATED);
        } else {
            // generate a single thread dump
            final Map<Thread,StackTraceElement[]> stackTraces = Thread.getAllStackTraces();
            appendStackTraces(sb.getRootPath(), buffer, stackTraces, plain, Thread.State.BLOCKED);
            appendStackTraces(sb.getRootPath(), buffer, stackTraces, plain, Thread.State.RUNNABLE);
            appendStackTraces(sb.getRootPath(), buffer, stackTraces, plain, Thread.State.TIMED_WAITING);
            appendStackTraces(sb.getRootPath(), buffer, stackTraces, plain, Thread.State.WAITING);
            appendStackTraces(sb.getRootPath(), buffer, stackTraces, plain, Thread.State.NEW);
            appendStackTraces(sb.getRootPath(), buffer, stackTraces, plain, Thread.State.TERMINATED);
        }
        
    	bufferappend(buffer, plain, "************* End Thread Dump " + dt + " *******************");